import re

import pandas as pd
import re


def extract_parts_from_series(series, part_index):
    """
    从符合格式的字符串Series中提取指定部分

    参数:
    series : pandas Series, 包含格式为 "aaa-bbb-ccc.ddd.eee.fff" 的字符串
    part_index : 要提取的部分索引 (1-6)

    返回:
    pd.Series : 包含提取部分的Series

    异常:
    ValueError: 当part_index不在1-6范围内
    """
    # 验证部分索引
    if part_index < 1 or part_index > 6:
        raise ValueError("part_index 必须在 1 到 6 之间")

    # 编译高效的正则表达式
    pattern = re.compile(r'^([^-\.]+)-([^-\.]+)-([^-\.]+)\.([^-\.]+)\.([^-\.]+)\.([^-\.]+)$')

    # 提取函数
    def extract_part(s):
        match = pattern.match(s)
        if match:
            return match.group(part_index)
        return None  # 不符合格式的返回None

    # 应用提取函数并返回Series
    return series.apply(extract_part)


# 示例使用
if __name__ == "__main__":
    # 创建示例数据
    data = [
        "项目名称-20230115-张三.001.002.003",
        "5G技术应用-20230520-李四.005.006.007",
        "《人工智能》实践-20231231-王五.010.011.012"
    ]
    s = pd.Series(data, name="原始字符串")

    print("原始数据Series:")
    print(s)
    print()

    # 提取不同部分
    for i in range(1, 7):
        extracted = extract_parts_from_series(s, i)
        print(f"提取第 {i} 部分:")
        print(extracted)
        print()

    # 提取特定部分示例
    project_names = extract_parts_from_series(s, 1)
    dates = extract_parts_from_series(s, 2)
    file_versions = extract_parts_from_series(s, 6)

    print("\n项目名称:")
    print(project_names)

    print("\n日期部分:")
    print(dates)

    print("\n文件版本:")
    print(file_versions)